package kr.co.insoft.core.repository.orchestration;

import java.util.List;

import kr.co.insoft.core.model.orchestration.CompositeEntityModel;
import kr.co.insoft.core.model.orchestration.CompositeStackEntityModel;
import kr.co.insoft.core.model.orchestration.OrchestrationResultModel;
import kr.co.insoft.core.model.orchestration.ProjectEntityModel;
import kr.co.insoft.core.model.orchestration.ServiceEntityModel;
import kr.co.insoft.framework.exceptions.RepositoryException;

public interface OrchestrationRepository {

	public OrchestrationResultModel createProject(
			ProjectEntityModel projectEntityModel) throws RepositoryException;

	public ProjectEntityModel getProject(ProjectEntityModel projectEntityModel)
			throws RepositoryException;

	public OrchestrationResultModel createService(
			ServiceEntityModel serviceEntityModel) throws RepositoryException;

	public ServiceEntityModel getService(ServiceEntityModel serviceEntityModel)
			throws RepositoryException;

	public OrchestrationResultModel createComposite(
			CompositeEntityModel compositeEntityModel)
			throws RepositoryException;

	public CompositeEntityModel getComposite(
			CompositeEntityModel compositeEntityModel)
			throws RepositoryException;

	public int getProjectChildCount(ProjectEntityModel projectEntityModel)
			throws RepositoryException;

	public void removeProject(ProjectEntityModel projectEntityModel)
			throws RepositoryException;

	public int getChildCountComposite(CompositeEntityModel compositeEntityModel)
			throws RepositoryException;

	public void removeComposite(CompositeEntityModel compositeEntityModel)
			throws RepositoryException;

	public int getChildCountService(ServiceEntityModel serviceEntityModel)
			throws RepositoryException;

	public void removeService(ServiceEntityModel serviceEntityModel)
			throws RepositoryException;

	public List<ProjectEntityModel> getProjectsForSearchCondition(
			ProjectEntityModel projectEntityModel) throws RepositoryException;

	public List<ServiceEntityModel> getServicesForSearchCondition(
			ServiceEntityModel serviceEntityModel) throws RepositoryException;

	public List<CompositeEntityModel> getCompositesForSearchCondition(
			CompositeEntityModel compositeEntityModel)
			throws RepositoryException;

	public OrchestrationResultModel createStack(
			CompositeStackEntityModel compositeStackEntityModel)
			throws RepositoryException;
}
